package com.qinghong.blog.service;

import com.qinghong.blog.dto.*;
import com.qinghong.blog.entity.Article;
import com.baomidou.mybatisplus.extension.service.IService;
import com.qinghong.blog.vo.ArticleVO;
import com.qinghong.blog.vo.ConditionVO;
import com.qinghong.blog.vo.DeleteVO;

import java.util.List;

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author qinghong
 * @since 2021-12-06
 */
public interface IArticleService extends IService<Article> {

    /**
     * 查看文章归档
     * @param current
     * @return
     */
    PageDTO<ArchiveDTO> listArchives(Long current);

    /**
     * 查看首页文章
     * @param current
     * @return
     */
    List<ArticleHomeDTO> listArticles(Long current);

    /**
     * 查看后台文章
     * @param conditionVO
     * @return
     */
    PageDTO<ArticleBackDTO> listArticleBackDTO(ConditionVO conditionVO);

    /**
     * 查看文章选项
     * @return
     */
    ArticleOptionDTO listArticleOptionDTO();

    /**
     * 添加或修改文章
     * @param articleVO
     */
    void saveOrUpdateArticle(ArticleVO articleVO);

    /**
     * 修改文章置顶
     * @param articleId
     * @param isTop
     */
    void updateArticleTop(Integer articleId, Integer isTop);

    /**
     * 恢复或删除文章
     * @param deleteVO
     */
    void updateArticleDelete(DeleteVO deleteVO);

    /**
     * 物理删除文章
     * @param articleIdList
     */
    void deleteArticles(List<Integer> articleIdList);

    /**
     * 根据id查看后台文章
     * @param articleId
     * @return
     */
    ArticleVO getArticleBackById(Integer articleId);

    /**
     * 根据id查看文章
     * @param articleId
     * @return
     */
    ArticleDTO getArticleById(Integer articleId);

    /**
     * 点赞文章
     * @param articleId
     */
    void saveArticleLike(Integer articleId);

    /**
     * 查询最新文章
     * @return
     */
    List<ArticleRecommendDTO> listNewestArticles();

    /**
     * 搜索文章
     * @param condition
     * @return
     */
    List<ArticleSearchDTO> listArticlesBySearch(ConditionVO condition);
}
